home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Environments / Small Eiffel 0.4.8 / lib_std / pointer.e < prev    next >
Text File  |  1997-04-13  |  2KB  |  78 lines

  1. -- Part of SmallEiffel -- Read DISCLAIMER file -- Copyright (C) 
  2. -- Dominique COLNET and Suzanne COLLIN -- colnet@loria.fr
  3. --
  4. expanded class POINTER
  5. --
  6. -- References to objects meant to be exchanged with non-Eiffel 
  7. -- software.
  8. --
  9. -- Note : corresponding C type is mapped as "void *" except for
  10. --        source files "string.e", "array.e" and "fixed_array.e".
  11. --        In file "string.e", type POINTER is simply mapped as
  12. --        the usual C type "char*".
  13. --        In files "array.e" and "fixed_array.e", the mapping depends
  14. --        on the actual generic type. When the actual generic type
  15. --        is a reference type, POINTER is mapped as C type "T0 **".
  16. --        When the actual type is an expanded type, POINTER is mapped 
  17. --        as "<Ti>*" where <Ti> is the corresponding type of expanded
  18. --        actual generic argument.
  19. --
  20.  
  21. inherit 
  22.    POINTER_REF
  23.       redefine fill_tagged_out_memory
  24.       end;
  25.  
  26. feature
  27.  
  28.    is_not_void: BOOLEAN is
  29.      -- Is the external POINTER a non Void pointer ?
  30.      --  
  31.      -- NOTE: as POINTER is an expanded class, the Eiffel
  32.      --       test  Current /= Void is always true.
  33.      --
  34.       external "CSE"
  35.       end;
  36.  
  37.    is_void: BOOLEAN is
  38.       do
  39.      Result := not is_not_void;
  40.       end;
  41.  
  42. feature -- Object Printing :
  43.  
  44.    append_in(str: STRING) is
  45.      -- Append on `str' a viewable version of Current 
  46.      -- (like the one of C printf "%p").
  47.       local
  48.      p: POINTER;
  49.       do
  50.      from
  51.         tmp_string.blank(127);
  52.         p := tmp_string.to_external;
  53.         c_inline_c("sprintf(_p,%"%%p%",C);");
  54.      variant
  55.         tmp_string.count
  56.      until
  57.         tmp_string.last = '%U'
  58.      loop
  59.         tmp_string.remove_last(1);
  60.      end;
  61.      tmp_string.remove_last(1);
  62.      str.append(tmp_string);
  63.       end;
  64.  
  65.    fill_tagged_out_memory is
  66.       do
  67.      Current.append_in(tagged_out_memory);
  68.       end;
  69.  
  70. feature {NONE}
  71.  
  72.    tmp_string: STRING is
  73.       once
  74.      !!Result.make(128);
  75.       end;
  76.  
  77. end -- POINTER
  78.